<?php

function simulare_atac($defensiva, $ofensiva) 
	{
	
	// Calculeaza forta defensiva
	 $forta_defensiva = 0;
	 if($defensiva>0){
	 $unitati = explode(",", $defensiva);
	 $i=0;
	 while(isset($unitati[$i]))
	 		{
			list($tip_unitate, $nr_unitati, $defensiva) = explode("#", $unitati[$i]);
			$forta_defensiva += ($nr_unitati * $defensiva);
			$matrice_defensiva[$i][0] = $tip_unitate;																		//tipul unitatii
			$matrice_defensiva[$i][1] = $nr_unitati;																		//Numarul de unitati de acest tip
			$matrice_defensiva[$i][2] = $defensiva;																			//Puterea setului de unitati
			$matrice_defensiva[$i][3] = 0;
			$i++;
			}
	}
	// echo "Forta defensiva: ".$forta_defensiva."<br>";						// RAID pentru gandaci
	
	// Calculeaza forta ofensiva
	 $forta_ofensiva = 0;
	 $unitati = explode(",", $ofensiva);
	 $j=0;
	 while(isset($unitati[$j]))
	 		{
			list($tip_unitate, $nr_unitati, $ofensiva) = explode("#", $unitati[$j]);
			$forta_ofensiva += ($nr_unitati * $ofensiva);
			$matrice_ofensiva[$j][0] = $tip_unitate;																		//tipul unitatii
			$matrice_ofensiva[$j][1] = $nr_unitati;																		//Numarul de unitati de acest tip
			$matrice_ofensiva[$j][2] = $ofensiva;											//Puterea setului de unitati
			$matrice_ofensiva[$j][3] = 0;
			$j++;
			}
	//echo "Forta ofensiva: ".$forta_ofensiva."<br><br>";						// RAID pentru gandaci
			
	// Calculeaza diferenta dintre cele doua puteri
	if($forta_defensiva>$forta_ofensiva)
		{
		//Calculeaza puterea ramasa si declara invingatorul.
		 $putere_ramasa = $forta_defensiva - $forta_ofensiva;
		 $castigator = "defensiva";
		 
		// Ordoneaza matricea unitatilor
		 for($x=0;$x<$i;$x++)
		 	for($y=$x+1;$y<$i;$y++)
			 if($matrice_defensiva[$x][2]<$matrice_defensiva[$y][2])
			 	{
				// Interschimba tipul unitatii;
				 $aux = $matrice_defensiva[$x][0];
				 $matrice_defensiva[$x][0] = $matrice_defensiva[$y][0];
				 $matrice_defensiva[$y][0] = $aux;
				// Interschimba numarul de unitati;
				 $aux = $matrice_defensiva[$x][1];
				 $matrice_defensiva[$x][1] = $matrice_defensiva[$y][1];
				 $matrice_defensiva[$y][1] = $aux;
				// Interschimba puterea unitatilor;
				 $aux = $matrice_defensiva[$x][2];
				 $matrice_defensiva[$x][2] = $matrice_defensiva[$y][2];
				 $matrice_defensiva[$y][2] = $aux;
				}
		}
			else
		{
		//Calculeaza puterea ramasa si declara invingatorul.
		 $putere_ramasa = $forta_ofensiva - $forta_defensiva;
		 $castigator = "ofensiva";
		// Ordoneaza matricea unitatilor in functie de puterea fiecarei unitati in parte
		 for($x=0;$x<$j;$x++)
		 	for($y=$x+1;$y<$j;$y++)
			 if($matrice_ofensiva[$x][2]<$matrice_ofensiva[$y][2])
			 	{
				// Interschimba tipul unitatii;
				 $aux = $matrice_ofensiva[$x][0];
				 $matrice_ofensiva[$x][0] = $matrice_ofensiva[$y][0];
				 $matrice_ofensiva[$y][0] = $aux;
				// Interschimba numarul de unitati;
				 $aux = $matrice_ofensiva[$x][1];
				 $matrice_ofensiva[$x][1] = $matrice_ofensiva[$y][1];
				 $matrice_ofensiva[$y][1] = $aux;
				// Interschimba puterea unitatilor;
				 $aux = $matrice_ofensiva[$x][2];
				 $matrice_ofensiva[$x][2] = $matrice_ofensiva[$y][2];
				 $matrice_ofensiva[$y][2] = $aux;
				}
		}
	
	// Declara $putere_initiala ca fiind forta totala a invingatorului.
	if($castigator == "defensiva")
		$putere_initiala = $forta_defensiva;
		 else
		if($castigator == "ofensiva")
			$putere_initiala = $forta_ofensiva;
	
	// Calculeaza unitatile pierdute in procentaj			
	$putere_restituita = 0;															// Initializare putere restituita
	$p = 0;
	$v = 0;
	
	//echo "Putere ramasa: ".$putere_ramasa."<BR><br>";						// RAID pentru gandaci
	
	// Calculeaza unitatile restituite daca castigatorul este defensiva
	if($castigator == "defensiva")
		 while($putere_ramasa>=$putere_restituita)
		 		{
				 if($matrice_defensiva[$p][3]+1<=$matrice_defensiva[$p][1])
				  {
				   if($putere_restituita + $matrice_defensiva[$p][2] < $putere_ramasa)
				 			{
							 $putere_restituita += $matrice_defensiva[$p][2];
							 $matrice_defensiva[$p][3] ++;
							 $v = 0;
							}				 
						 	 else
							{
							 if($putere_restituita + $matrice_defensiva[$p][2] == $putere_ramasa)
							 		{
									 $putere_restituita += $matrice_defensiva[$p][2];
							 		 $matrice_defensiva[$p][3] ++;
									 $v = $i;
									} else { $v++; }
							}
				   if($v==$i) 
				 		break;
				  }
				// Incrementeaza/reseteaza contoarul
				   $p++;
				   if($p==$i) 
			 		    $p=0;
				}
		else
		 if($castigator == "ofensiva")
		 	while($putere_ramasa>=$putere_restituita)
		 		{
				 if($matrice_ofensiva[$p][3]+1<=$matrice_ofensiva[$p][1])
				  {
				   if($putere_restituita + $matrice_ofensiva[$p][2] < $putere_ramasa)
				 			{
							 $putere_restituita += $matrice_ofensiva[$p][2];
							 $matrice_ofensiva[$p][3] ++;
							 $v = 0;
							}				 
						 	 else
							{
							 if($putere_restituita + $matrice_ofensiva[$p][2] == $putere_ramasa)
							 		{
									 $putere_restituita += $matrice_ofensiva[$p][2];
							 		 $matrice_ofensiva[$p][3] ++;
									 $v = $j;
									} else { $v++; }
							}
				   if($v==$j) 
				 		break;
				  }
				// Incrementeaza/reseteaza contoarul
				   $p++;
				   if($p==$j) 
			 		    $p=0;
				}
		

	if($castigator == "defensiva")
		{
		 $sir="defensiva";
		 for($x=0;$x<$i;$x++)
				{
				//$put = $matrice_defensiva[$x][2] * $matrice_defensiva[$x][3];
				 //echo "A castigat defensiva. Numarul de unitati restituite, de tipul ".$matrice_defensiva[$x][0].", este: ".$matrice_defensiva[$x][3].", din ".$matrice_defensiva[$x][1].", cu puterea totala de: ".$put."<Br>";
				 $sir = $sir.','.$matrice_defensiva[$x][0].'#'.$matrice_defensiva[$x][1].'#'.$matrice_defensiva[$x][3];
				}
		}
		else
		 if($castigator == "ofensiva")
		 	{
			 $sir="ofensiva";
			 for($x=0;$x<$j;$x++)
				{
				//$put = $matrice_ofensiva[$x][2] * $matrice_ofensiva[$x][3];
				 //echo "A castigat ofensiva. Numarul de unitati restituite, de tipul ".$matrice_ofensiva[$x][0].", este: ".$matrice_ofensiva[$x][3].", din ".$matrice_ofensiva[$x][1].", cu puterea totala de: ".$put."<Br>";
				 $sir = $sir.','.$matrice_ofensiva[$x][0].'#'.$matrice_ofensiva[$x][1].'#'.$matrice_ofensiva[$x][3];
				}
			}
	return $sir;
	}
	
/*
$b = '1#10#40#15,3#5#90#90,4#2#400#400,5#7#60#25,6#15#10#10,7#1#800#800,8#9#40#15,9#100#15#15,2#5#30#30' ;
$a = '1#10#50#50,2#20#100#70';

echo simulare_atac($a,$b);
*/

function calculare_trupe($planeta_defensiva) {
 $unitati_def = '';
 $query = mysql_query("SELECT * FROM `unitati` WHERE `planeta` = '".$planeta_defensiva."' AND `tip` > '1'");
 $nr_rand = mysql_num_rows($query);
 $k = 0;
 if($nr_rand>0){
  while ($rez_unitati = mysql_fetch_array($query)) {
  $k++;
  $tip = $rez_unitati["tip"];
  $nr = $rez_unitati["nr"];
  $vector = mysql_fetch_row(mysql_query("SELECT defensiva_terestra, defensiva_aeriana, ofensiva_terestra, ofensiva_aeriana FROM c_unitati WHERE id = '".$tip."'"));
  $defensiva = $vector[0] + $vector[1];
  //$ofensiva = $vector[2] + $vector[3];
  //echo $tip.'#'.$nr.'#'.$defensiva.'<br>';
  $unitati_def .= $tip.'#'.$nr.'#'.$defensiva;
   if ($k < $nr_rand)
    $unitati_def .= ',';  
  }  
  }else{$unitati_def = 0;}
  return $unitati_def;
}

//calculare_trupe('75745777456g7d65s7gds57gds5');

function procesare_date($tip, $string, $defensiva, $ofensiva) {
//functie apelata pentru procesarea atacului, modificarea trupelor din baza de date si construirea mesajului de sistem.
	 $vector = explode(",", $string);
	 if ($tip == 'atac') {
	 $i=1;
	 $output = '<p>Lupta s-a finalizat.</p>';
	 $output .= 'Castigatorul este ';
	 if ($vector[0] == 'defensiva')
	 { 
	  $planeta_c = $defensiva;
	  $planeta_i = $ofensiva;
	 } else {
	  $planeta_c = $ofensiva;
	  $planeta_i = $defensiva;
	 }
	 $castigator = valoare_mysql("SELECT `user` FROM `planete` WHERE `id` = '".$planeta_c."'");
	 $invins = valoare_mysql("SELECT `user` FROM `planete` WHERE `id` = '".$planeta_i."'");
	 	 
	 $output .= '<strong>'.$castigator.'</strong>.<br>';
	 $output .= '<p>Trupe <strong>'.$castigator.'</strong>: </p><table border="1" class="font_1"><tr><td>Tip:</td><td>Numar:</td><td>Unitati pierdute:</td></tr>'; 
	 while(isset($vector[$i]))
	 		{
			list($tip_unitate, $nr_unitati, $unitati_ramase) = explode("#", $vector[$i]);
			$unitati_pierdute = $nr_unitati - $unitati_ramase;
			//Update unitati castigator
			if ($unitati_pierdute > 0) {
				if($planeta_c == $defensiva)
			 		 mysql_query("UPDATE `unitati` SET `nr` = `nr` - '".$unitati_pierdute."' WHERE `planeta` = '".$planeta_c."' AND `tip` = '".$tip_unitate."' AND `locatie` = 'disponibili'");
				if($planeta_c == $ofensiva)
					mysql_query("UPDATE `unitati` SET `nr` = `nr` - '".$unitati_pierdute."' WHERE `planeta` = '".$planeta_c."' AND `tip` = '".$tip_unitate."' AND `locatie` = '".$defensiva."'");
			 }
			$nume_unitate = mysql_fetch_row(mysql_query("SELECT `nume` FROM `c_unitati` WHERE `id` = '".$tip_unitate."'"));
			$output .= "<tr><td>".$nume_unitate[0]."</td><td>".$nr_unitati."</td><td>".$unitati_pierdute."</td></tr>";
			$i++;
	} 
	//Update unitati invins
	if($planeta_c == $defensiva)
			mysql_query("DELETE FROM `unitati` WHERE `locatie` = '".$planeta_c."' AND `planeta` = '".$planeta_i."'");
	if($planeta_c == $ofensiva)
			mysql_query("UPDATE `unitati` SET `nr` = '0' WHERE `planeta` = '".$planeta_i."' AND `tip` > '1' AND `locatie` = 'disponibili'");
			
	$output .= '</table>';
	$output .= '<p>Trupele lui <strong>'.$invins.'</strong> au fost decimate.</p>';
	}
	return $output;
}

function procesare_actiuni_ofensiva($planeta) {

 //Includere si procesare fisierul motor_unitati.php trimitand variabila $variabila_motor_unitati
 $variabila_motor_unitati = $planeta;
 $fisier = require_once("motor_unitati.php");
 unset($fisier, $variabila_motor_unitati);

 //Includere si procesare fisierul resurse.php trimitand variabila $variabila_resurse
 $variabila_resurse = $planeta;
 $fisier = require_once("resurse.php");
 unset($fisier, $variabila_resurse);

}

/*function procesare_intoarcere($string, $defensiva, $ofensiva) {
 // Proceseaza trupele intoarse si actualizeaza in baza de date.
  $vector = explode(",", $string);
  $i=1;
   if ($vector[0] == 'defensiva')
	 { 
	  $planeta_c = $defensiva;
	  $planeta_i = $ofensiva;
	 } else {
	  $planeta_c = $ofensiva;
	  $planeta_i = $defensiva;
	 }
	 while(isset($vector[$i]))
	 		{
			 list($tip_unitate, $nr_unitati, $unitati_ramase) = explode("#", $vector[$i]);
			 $unitati_pierdute = $nr_unitati - $unitati_ramase;
			//Update unitati castigator
			 if ($unitati_pierdute > 0)
			 	if($planeta_c == $defensiva)
			 		mysql_query("UPDATE `unitati` SET `nr` = `nr` - '".$unitati_pierdute."' WHERE `planeta` = '".$planeta_c."' AND `tip` = '".$tip_unitate."' AND `locatie` = 'disponibili'");
				if($planeta_c == $ofensiva)
					mysql_query("UPDATE `unitati` SET `nr` = `nr` - '".$unitati_pierdute."' WHERE `planeta` = '".$planeta_c."' AND `tip` = '".$tip_unitate."' AND `locatie` = '".$defensiva."'");
			 $i++;
			}
 
}*/

function mutare_trupe_ofensiva($string, $planeta, $destinatia) {
 // Muta trupele care sunt trimise la atac
  $vector = explode(",", $string);
  $i=0;
  while(isset($vector[$i]))
	 		{
			 list($tip_unitate, $nr_unitati, $ofensiva_a) = explode("#", $vector[$i]);
			 mysql_query("UPDATE `unitati` SET `nr` = `nr` - '".$nr_unitati."' WHERE `planeta` = '".$planeta."' AND  `tip` = '".$tip_unitate."' AND `locatie` = 'disponibili' LIMIT 1");
			 mysql_query("INSERT INTO `unitati` ( `id` , `tip` , `nr` , `locatie` , `planeta` ) VALUES ( NULL , '".$tip_unitate."', '".$nr_unitati."', '".$destinatia."', '".$planeta."' )");
			 $i++;
			} 
}

function mutare_inapoi_trupe_ofensiva($planeta, $tinta, $actiune) {
 // Imbina trupele la loc dupa ce se intorc de la atac
 if($actiune == "sterge")
 		{
		 mysql_query("DELETE FROM `unitati` WHERE `locatie` = '".$tinta."' AND `planeta` = '".$planeta."'");
		}
		
 if($actiune == "imbina")
 		{
		 $query = mysql_query("SELECT * FROM `unitati` WHERE `locatie` = '".$tinta."' AND `planeta` = '".$planeta."'");
		 while($rezzz = mysql_fetch_array($query))
		 		{
				 mysql_query("UPDATE `unitati` SET `nr` = `nr` + '".$rezzz["nr"]."' WHERE `planeta` = '".$planeta."' AND `tip` = '".$rezzz['tip']."' AND `locatie` = 'disponibili'");
				}
		 mysql_query("DELETE FROM `unitati` WHERE `locatie` = '".$tinta."' AND `planeta` = '".$planeta."'");
		}
}
//procesare_date('ofensiva,2#1000#831,1#1000#837', 'raducu', 'morion');

?>